package utils.course;

import java.util.Arrays;

public class RingArrary {
    public static class Queue{
        private int[]arr;
        private int pushi;
        private int polli;
        // 用于记录当前占用了几个空间，最大空间是limit
        private int size;
        private final int limit;

        public Queue(int limit) {
            this.arr = new int[limit];
            pushi = 0;
            polli = 0;
            size = 0;
            this.limit = limit;
        }

        public void push(int value){
            if (size == limit){
                throw new RuntimeException("栈满了，不能再push了");
            }
            // 占用孔家+1；
            size++;
            // 当前位置指针存储值
            arr[pushi] = value;
            // 前置指针往下一个位置指；
            pushi = nextIndex(pushi);
        }
        public int pop(){
            if (size==0){
                throw new RuntimeException("栈空了，不能再poll了");
            }
            size--;
            int temp = arr[polli];
            arr[polli] = 0; // 回收，值置空
            polli = nextIndex(polli);
            return temp;
        }
        // 如果下标是i,返回下一个位置；
        private int nextIndex(int i){
            // limit-1是最后一个元素 ，如果到了最后一个元素，下一个就返回到0，否则，继续往下索引；
            return i< limit-1 ? i+1 : 0;
        }

        @Override
        public String toString() {
            String str = "";
            for (int i = 0; i < arr.length; i++) {
                str+=arr[i]+",";
            }
            return str;
        }
    }

    public static void main(String[] args) {

        Queue queue = new Queue(7);
        System.out.println("初始化=="+queue.toString());
        for (int i = 0; i < 7; i++) {
            queue.push(i+3);
            System.out.print(i+3+",");
        }
        System.out.println("装满=="+queue.toString());
        for (int i = 0; i < 2; i++) {
            System.out.println(queue.pop());
        }
        System.out.println("移除2=="+queue.toString());
        for (int i = 0; i < 2; i++) {
            queue.push(10+i);
            System.out.print(10+i+"");
        }
        System.out.println("新增2=="+queue.toString());
    }
}
